using System;
using System.Collections.Generic;
using Tarkin.InfrastructureLibrary.Core.Basic;

namespace Tarkin.Reflection
{
    /// <summary>
    /// The Element class is the implementation of the Element abstract class as defined by 
    /// section 9.1 of the Meta Object Facility (MOF) Core Specification (version 
    /// 2.0, dated January 2006).
    /// </summary>
    /// <remarks>Tarkin classes are NOT thread-safe.</remarks>
    public abstract class Element : Tarkin.InfrastructureLibrary.Core.Basic.Element
    {

#region Private Members

        private Class metaClass;

        private Element container;

#endregion


#region Constructors

        public Element ( Class metaClass )
        {
            MetaClass = metaClass;
        }

        public Element ( Class metaClass, Element container )
        {
            MetaClass = metaClass;
            Container = container;
        }

#endregion


#region Public Properties

        public Class MetaClass
        {
            get
            {
                return metaClass;
            }

            set
            {
                if ( value == null )
                {
                    throw new ArgumentNullException ( "Element's metaclass cannot be null!" );
                }

                metaClass = value;
            }
        }

        public Element Container
        {
            get
            {
                return container;
            }

            set
            {
                container = value;
            }
        }

#endregion


#region Public Methods

        public Class GetMetaClass ()
        {
            return MetaClass;
        }

        public Object Get ( Property property )
        {

            throw new
        }

#endregion

    }
}
